﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Styx.Helpers;
using System.IO;
using Styx;
using Styx.Common;
using System.ComponentModel;
using DefaultValue = Styx.Helpers.DefaultValueAttribute;
using Styx.TreeSharp;

namespace FrostDK
{
    public class CRSettingsFrost : Settings
    {
        public static readonly CRSettingsFrost myPrefs = new CRSettingsFrost();

        public CRSettingsFrost()
            : base(
                Path.Combine(Utilities.AssemblyDirectory,
                    string.Format(@"Routines/Settings/Config/Pasterke/{0}/DeathKnight/DKSettingsFrost-{1}.xml", StyxWoW.Me.RealmName, StyxWoW.Me.Name))
                )
        {
        }
        //update
        [Setting]
        [DefaultValue(false)]
        [Category("Combat Routine Updates")]
        [DisplayName("Auto Update")]
        [Description("[False] : Manual update by you  [True] : Auto download and install updates")]
        public bool AutoUpdate { get; set; }

        public enum Keypress
        {
            NONE,
            LSHIFT,
            RSHIFT,
            LCTRL,
            RCTRL,
            LALT,
            RALT
        };

        [Setting]
        [DefaultValue(Keypress.NONE)]
        [Category("Hotkeys")]
        [DisplayName("Pause Aoe Key")]
        [Description("Pause Aoe Key")]
        public Keypress StopAoeKey { get; set; }

        [Setting]
        [DefaultValue(Keypress.NONE)]
        [Category("Hotkeys")]
        [DisplayName("Pause CombatRoutine Key")]
        [Description("Pause CR Key")]
        public Keypress StopCRKey { get; set; }


        [Setting]
        [DefaultValue(true)]
        [Category("Hotkeys")]
        [DisplayName("Print Raidstyle Messages")]
        public bool PrintRaidstyleMsg { get; set; }

        //movement

        [Setting]
        [DefaultValue(false)]
        [Category("Movement")]
        [DisplayName("Auto Target")]
        [Description("Auto Target")]
        public bool AutoTargeting { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("Movement")]
        [DisplayName("Movement")]
        [Description("Movement")]
        public bool AutoMovement { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("Movement")]
        [DisplayName("Auto Facing")]
        [Description("Auto Facing")]
        public bool AutoFacing { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("Movement in Raids, Instances, Dungeons")]
        [DisplayName("Disable Auto Move")]
        [Description("Disable Auto Movement in Raids, Instances, Dungeons")]
        public bool DisableAutoMovement { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("Movement in Raids, Instances, Dungeons")]
        [DisplayName("Disable Auto Target")]
        [Description("Disable Auto Targeting in Raids, Instances, Dungeons")]
        public bool DisableAutoTargeting { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("Movement in Raids, Instances, Dungeons")]
        [DisplayName("Disable Auto Facing")]
        [Description("Disable Auto Facing in Raids, Instances, Dungeons")]
        public bool DisableAutoFacing { get; set; }


        //Protection
        [Setting]
        [DefaultValue(70)]
        [Category("Protection")]
        [DisplayName("Rune Tap HP %")]
        public int RuneTapPercent { get; set; }

        [Setting]
        [DefaultValue(45)]
        [Category("Protection")]
        [DisplayName("Icebound Fortitude HP %")]
        public int IceboundFortitudePercent { get; set; }

        [Setting]
        [DefaultValue(25)]
        [Category("Protection")]
        [DisplayName("Death Pact HP %")]
        public int DeathPactPercent { get; set; }

        [Setting]
        [DefaultValue(55)]
        [Category("Protection")]
        [DisplayName("Death Siphon HP %")]
        public int DeathSiphonPercent { get; set; }

        [Setting]
        [DefaultValue(75)]
        [Category("Protection")]
        [DisplayName("Vampiric Blood HP %")]
        public int PercentVampiricBlood { get; set; }


        //spells
        [Setting]
        [DefaultValue(false)]
        [Category("DeathKnight")]
        [DisplayName("Glyph of Outbreak")]
        [Description("Have Glyph of Outbreak")]
        public bool HaveOutbreak { get; set; }

        [Setting]
        [DefaultValue(3)]
        [Category("DeathKnight")]
        [DisplayName("Death and Decay Adds")]
        public int DeathAndDecayAdds { get; set; }

        [Setting]
        [DefaultValue(0)]
        [Category("DeathKnight")]
        [DisplayName("Remorseless Winter Adds")]
        [Description("0 to disable")]
        public int RemorselessWinterAdds { get; set; }

        [Setting]
        [DefaultValue(0)]
        [Category("DeathKnight")]
        [DisplayName("Dancing Rune Weapon HP %")]
        public int DancingPercent { get; set; }

        [Setting]
        [DefaultValue(70)]
        [Category("DeathKnight")]
        [DisplayName("Rune Strike RunicPower %")]
        public int RuneStrikePercent { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("DeathKnight")]
        [DisplayName("Auto Interrupt")]
        [Description("Mind Freeze, Death Grip, Asphixiate, War Stomp")]
        public bool AutoInterrupt { get; set; }

        //enums
        public enum TargetsStatus
        {
            Never,
            OnCoolDown,
            BossesOnly
        }

        //resting

        [Setting]
        [DefaultValue(45)]
        [Category("Eat Food")]
        [DisplayName("Eat Food HP %")]
        [Description("Eat food out of combat")]
        public int FoodPercent { get; set; }

        // trinkets section
        [Setting]
        [DefaultValue(false)]
        [Category("Trinket 1")]
        [DisplayName("Auto use")]
        [Description("Auto use trinket 1")]
        public bool AutoTrinket1 { get; set; }

        [Setting]
        [DefaultValue(0)]
        [Category("Trinket 1")]
        [DisplayName("HP %")]
        [Description("Use trinket 1 below HP %")]
        public int trinket1hppercent { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("Trinket 1")]
        [DisplayName("Crowd Control")]
        [Description("Use trinket 1 when you are Crowd Controlled")]
        public bool trinket1crowdcontrolled { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("Trinket 1")]
        [DisplayName("Dps boost")]
        [Description("Use trinket 1 as DPS boost")]
        public bool trinket1dpsboost { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("Trinket 2")]
        [DisplayName("Auto use")]
        [Description("Auto use trinket 2")]
        public bool AutoTrinket2 { get; set; }

        [Setting]
        [DefaultValue(0)]
        [Category("Trinket 2")]
        [DisplayName("HP %")]
        [Description("Use trinket 2 below HP %")]
        public int trinket2hppercent { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("Trinket 2")]
        [DisplayName("Crowd Control")]
        [Description("Use trinket2 when you are Crowd Controlled")]
        public bool trinket2crowdcontrolled { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("Trinket 2")]
        [DisplayName("Dps boost")]
        [Description("Use trinket 2 as DPS boost")]
        public bool trinket2dpsboost { get; set; }

        //Revive partymembers
        [Setting]
        [DefaultValue(false)]
        [Category("Raise Ally")]
        [DisplayName("Auto Res Tank")]
        [Description("Auto Res Tank")]
        public bool AutoResTank { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("Raise Ally")]
        [DisplayName("Auto Res Healer")]
        [Description("Auto Res Healer")]
        public bool AutoResHealer { get; set; }

        [Setting]
        [DefaultValue(55)]
        [Category("Protection")]
        [DisplayName("Healthstone HP %")]
        [Description("Use Healthstone below HP %")]
        public int PercentHealthstone { get; set; }

    }
}
